package com.zb.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zb.entity.QtyVo;
import com.zb.entity.ZjWorkLeaveMessage;
import com.zb.result.PageUtil;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * <p>
 * 工单留言表 Mapper 接口
 * </p>
 *
 * @author WEN
 * @since 2023-10-24
 */
@Repository
public interface ZjWorkLeaveMessageMapper extends BaseMapper<ZjWorkLeaveMessage> {

    /**
     * 根据工单ID更新工单客服未读留言
     * @param workId 工单ID
     * @return
     */
    int updateWorkEmpNotReadLeaveMessageByWorkId(@Param("workId") Long workId);

    /**
     * 根据工单ID更新服务商未读留言
     * @param workId 工单ID
     * @param engineer 是否服务负责人兼任工程师：false-不是，true-是
     * @return
     */
    int updateNetworkNotReadLeaveMessageByWorkId(@Param("workId") Long workId, @Param("engineer") boolean engineer);

    /**
     * 根据工单ID更新工程师未读留言
     * @param workId 工单ID
     * @return
     */
    int updateEngineerNotReadLeaveMessageByWorkId(@Param("workId") Long workId);

    /**
     * 根据工单ID更新工单客户未读留言
     * @param workId 工单ID
     * @return
     */
    int updateUserNotReadLeaveMessageByWorkId(@Param("workId") Long workId);

    /**
     * 根据工单ID获取客服未读的工单留言
     * @param workId 工单ID
     * @return
     */
    long getWorkNotReadLeaveMessageCount(@Param("workId") Long workId);

    /**
     * 根据工单ID获取工单留言列表
     * @param workId 工单ID
     * @param pageUtil
     * @return
     */
    List<ZjWorkLeaveMessage> getWorkLeaveMessageList(@Param("workId") Long workId, @Param("pageUtil") PageUtil pageUtil);

    /**
     * 根据工单ID获取工单留言列表总记录数
     * @param workId 工单ID
     * @return
     */
    long getWorkLeaveMessageListCount(@Param("workId") Long workId);

    /**
     * 根据工单ID获取服务商负责人的工单留言
     * @param empId   操作人ID
     * @param workId 工单ID
     * @param pageUtil 分页对象
     * @return
     */
    List<ZjWorkLeaveMessage> getNetworkWorkLeaveMessageList(@Param("empId") Long empId, @Param("workId") Long workId, @Param("pageUtil") PageUtil pageUtil);

    /**
     * 根据工单ID获取服务商负责人的工单留言总记录数
     * @param empId   操作人ID
     * @param workId 工单ID
     * @return
     */
    long getNetworkWorkLeaveMessageListCount(@Param("empId") Long empId, @Param("workId") Long workId);

    /**
     * 根据工单ID获取工程师的工单留言
     * @param empId   操作人ID
     * @param workId 工单ID
     * @param pageUtil 分页对象
     * @return
     */
    List<ZjWorkLeaveMessage> getEngineerWorkLeaveMessageList(@Param("empId") Long empId, @Param("workId") Long workId, @Param("pageUtil") PageUtil pageUtil);

    /**
     * 根据工单ID获取工程师的工单留言总记录数
     * @param empId   操作人ID
     * @param workId 工单ID
     * @return
     */
    long getEngineerWorkLeaveMessageListCount(@Param("empId") Long empId, @Param("workId") Long workId);

    /**
     * 根据工单ID获取服务商负责人最新的一条留言
     * @param manager 是否为服务商负责人或超管：false-不是，true-是
     * @param workIds 工单ID
     * @return
     */
    List<ZjWorkLeaveMessage> getNetworkLastOneMesageByWorkIds(@Param("manager") boolean manager, @Param("workIds") List<Long> workIds);

    /**
     * 根据工单ID获取服务商负责人或工程师未读的留言
     * @param manager 是否为服务商负责人或超管：false-不是，true-是
     * @param workIds 工单ID
     * @return
     */
    List<QtyVo> getNetworkNotReadQtyList(@Param("manager") boolean manager, @Param("workIds") List<Long> workIds);

    /**
     * 获取服务商未读留言数量
     * @param custAccId 商家ID
     * @param networkId 服务商ID
     * @return
     */
    long getNetworkUnreadMessageQty(@Param("custAccId") Long custAccId, @Param("networkId") Long networkId);

    /**
     * 获取工程师未读留言数量
     * @param custAccId 商家ID
     * @param networkId 服务商ID
     * @param networkEmpId 工程师ID
     * @return
     */
    long getNetworkEmpUnReadMessageQty(@Param("custAccId") Long custAccId, @Param("networkId") Long networkId, @Param("networkEmpId") Long networkEmpId);

    /**
     * 根据工单ID获取工单最新留言
     * @param workIds 工单ID
     * @return
     */
    List<ZjWorkLeaveMessage> getLastByWorkIds(@Param("workIds") List<Long> workIds);

    /**
     * 根据工单ID获取留言信息
     * @param workIds 工单ID
     * @return
     */
    List<ZjWorkLeaveMessage> getByWorkIds(@Param("workIds") List<Long> workIds);

}
